package com.entrogy.service;

import com.alibaba.fastjson.JSONObject;
import com.entrogy.bean.*;

import java.util.List;
import java.util.Map;

/**
 *   家长信息Service接口
 */
public interface ParentService {
    /**
     *  新增家长信息
     * @param parentVisitorEntity
     * @return int
     */
    int insertParent(ParentVisitorEntity parentVisitorEntity);

    /**
     *   修改家长信息
     * @param parentVisitorEntity
     * @return  int
     */
    int updateParent(ParentVisitorEntity parentVisitorEntity);

    /**
     * 根据学生id  获取家长信息
     * @param map
     * @return  list
     */
    List<Map<String,Object>> selectParentVisitorEntityById(Map<String,Object>  map);

    /**
     * 获取家长名字
     * @param uid
     * @return
     */
    String getParentName(String uid);

    /**
     * 根据父母ID获取所在的学校ID
     * @param uid
     * @return
     */
    Integer getSchoolCodeByParentId(String uid);

    /**
     * 根据父母ID查询出其所有的孩子
     * @param pid
     * @return
     */
    List<StudentEntity> getStudentByParentId(String pid);

    /**
     *   根据id 获取家长对象
     * @return
     */
    ParentVisitorEntity getparentById( String uId);

    /**
     * 根据家长ID查询出其所有的学生是否支付列表
     * @param uid
     * @return
     */
    List<StudentEntity> getStudentIsPayByPID(String uid);

    /**
     * 查看该学生的所有家长的联系方式
     * @param studentId
     * @return
     */
    List<JSONObject> ListParentPhonesByStudentId(Integer studentId);

    /**
     * 插入一条家长信息变更记录
     * @param parentPhoneChangeRecord
     * @return
     */
    boolean insertParentPhoneChangeRecord(ParentInformationChangeEntity parentPhoneChangeRecord);

    /**
     * 通过学生id查找家长的信息
     * @param studentId
     * @return
     */
    List<ParentVisitorEntity> listParentByStudentId(Integer studentId);

    /**
     * 插入学生变更记录
     * @param studentNewInformation
     * @return
     */
    boolean insertStudentPhoneChangeRecord(StudentInformationChangeEntity studentNewInformation);

    /**
     * 查看家长是否是待审核的信息修改
     * @param parentId
     * @param flag
     * @return
     */
    boolean hasToAudit(String parentId, Integer flag);

    /**
     * 查询家长信息变更字段
     * @param changeId
     * @return
     */
    JSONObject getParentInformationChangeDetail(Integer changeId);

    /**
     * 更新审核状态
     * @param changeId
     * @param agreed
     * @return
     */
    boolean updateChangeRecord(Integer changeId, Integer agreed);

    /**
     * 查找家长申请更改后的新号码
     * @param changeId
     * @return
     */
    String getNewPhone(Integer changeId);

    /**
     * 查询某个家长的信息变更记录
     * @param parentId
     * @return
     */
    JSONObject getParentInformationChangeList(String parentId);

    /**
     * 插入验证码
     * @param verifyCodeEntity
     * @return
     */
    Integer insertVerifyCode(VerifyCodeEntity verifyCodeEntity);

    /**
     * 对比验证码
     * @param id
     * @param verifyCode
     * @return
     */
    boolean compareVerifyCode(Integer id, Integer verifyCode);

    /**
     * 通过电话号码查询家长信息
     * @param parentPhone
     * @return
     */
    ParentVisitorEntity getParentByPhone(String parentPhone);

    /**
     * 查询这个学生的家长新增记录
     * @param studentId
     * @return
     */
    List<ParentInformationChangeEntity> listAddParentInformation(Integer studentId);

    /**
     * 查询该学生有多少个家长
     * @param studentId
     * @return
     */
    Integer countParent(Integer studentId);

    /**
     * 查询该学生有多少个家长
     * @param parentPhone
     * @return
     */
    JSONObject checkParentPhoneStatus(String parentPhone);


    /**
     * 微信号和手机号码解绑
     * @param id
     * @return
     */
    boolean cancelWeiXinAndPhoneBind(Integer id);

    /**
     * 微信号和新手机号绑定
     * @param id
     * @param newPhone
     * @return
     */
    boolean weiXinBindNewPhone(Integer id, String newPhone);

    boolean deleteRepeatParent(Integer schoolCode);

    boolean resetStudentParentPhone();

    boolean updateParentWeixinInformation();

    List<ParentVisitorEntity> listClassParent(Integer schoolCode, Integer classId);

    /**
     * 查询所有班级的家长以及学生人数
     * @param schoolCode
     * @param gradeId
     * @param classId
     * @return
     */
    List<ParentClassEntity> listClass(Integer schoolCode, Integer gradeId, Integer classId);

    List<StudentBasicInfoEntity> listStudentByParentId(String uid);

    List<Map<String, Object>> listSchoolParent(String schoolCode, String gradeId, String classId, String name);

    int countSchoolParent(String schoolCode, String gradeId, String classId, String name);

    boolean judgeParentPayStatusByStudent(String parentVisitorId);

    /**
     * 家长对应的所在年级、班级的孩子是否是付费记录
     * @param isGrade
     * @param parentClassId
     * @param parentVisitorId
     * @param schoolCode
     * @return
     */
    boolean isPayForGradeOrClass(Integer isGrade, String parentClassId, String parentVisitorId, Integer schoolCode);

    String getParentIdByOpenId(String parentOpenId);

    boolean updateParentDetail(String newParentName, String newImageUrl, String parentId);

    /**
     * 查询某个家长小程序登录情况
     * @param phone
     * @return
     */
    JSONObject getParentStatus(String phone);

    /**
     * 查询某个用户公众号关注情况
     * @param phone
     * @return
     */
    JSONObject getUserStatus(String phone);

    /**
     * 查询家长注册率概览
     * @param schoolCode
     * @param gradeId
     * @param classId
     * @return
     */
    List<ParentRegisterEntity> listParentRegisterOverView(Integer schoolCode, Integer gradeId, Integer classId);

    /**
     * 查询家长注册详细
     * @param schoolCode
     * @param gradeId
     * @param classId
     * @return
     */
    List<ParentRegisterStudentEntity> listParentRegisterDetail(Integer schoolCode, Integer gradeId, Integer classId);

    /**
     * 查询学生家长信息
     * @param schoolCode
     * @param gradeId
     * @param classId
     * @return
     */
    List<ParentStudentInfoEntity> listParentStudentInfo(Integer schoolCode, Integer gradeId, Integer classId);

    /**
     * 查询家长登录率
     * @param schoolCode
     * @param gradeId
     * @param classId
     * @return
     */
    ParentLoginOverviewEntity getParentLoginOverview(Integer schoolCode, Integer gradeId, Integer classId);

    /**
     * 查看家长登录到小程序详细（按家长统计）
     * @param schoolCode
     * @param gradeId
     * @param classId
     * @return
     */
    List<ParentLoginEntity> listParentLogin(Integer schoolCode, Integer gradeId, Integer classId);
}
